package com.he.service.impl;

import com.he.domain.dto.MailDTO;
import com.he.service.EmailService;
import jakarta.annotation.Resource;
import jakarta.mail.MessagingException;
import jakarta.mail.internet.MimeMessage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;

/**
 * @author He
 * @version 1.0
 * @Date 2023/9/9 15:25
 * @Desc 邮件服务实现类
 */
@Service
public class EmailServiceImpl implements EmailService {

    /**
     * 配置文件邮箱号
     */
    @Value("${spring.mail.username}")
    private String fromEmail;

    @Resource
    private JavaMailSender javaMailSender;

    @Resource
    private TemplateEngine templateEngine;

    @Override
    public void sendSimpleMail(MailDTO mailDTO) {
        // 创建一个简单邮件消息
        SimpleMailMessage mailMessage = new SimpleMailMessage();
        // 设置邮件发送者
        mailMessage.setFrom(fromEmail);
        // 设置邮件接收者
        mailMessage.setTo(mailDTO.getToEmail());
        // 设置邮件主题
        mailMessage.setSubject(mailDTO.getSubject());
        // 设置邮件内容
        mailMessage.setText(mailDTO.getContent());
        // 发送邮件
        javaMailSender.send(mailMessage);
    }

    @Override
    public void sendHtmlMail(MailDTO mailDTO) {
        try {
            // 创建一个MimeMessage对象
            MimeMessage mimeMessage = javaMailSender.createMimeMessage();
            // 使用MimeMessageHelper来处理MimeMessage，第二个参数设置为true表示要处理多部分消息（包括文本和HTML）
            MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage);
            // 创建Thymeleaf上下文并添加模板中需要的变量
            Context context = new Context();
            context.setVariables(mailDTO.getContentMap());
            System.out.println(mailDTO.getTemplate());
            // 使用Thymeleaf模板引擎处理模板，将变量填充到模板中
            String process = templateEngine.process(mailDTO.getTemplate(), context);
            // 设置发件人邮箱
            mimeMessageHelper.setFrom(fromEmail);
            // 设置邮件的收件人地址
            mimeMessageHelper.setTo(mailDTO.getToEmail());
            // 设置邮件的主题
            mimeMessageHelper.setSubject(mailDTO.getSubject());
            // 设置邮件的内容，第二个参数设置为true表示内容是HTML格式
            mimeMessageHelper.setText(process, true);
            // 使用JavaMailSender发送邮件
            javaMailSender.send(mimeMessage);
        } catch (MessagingException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void sendAttachmentsMail(MailDTO mailDTO) {

    }
}
